package com.zp.self.module.level_4_算法练习.数学.位运算;

/**
 * @author By ZengPeng
 */
public class 力扣_231_2的幂 {
    //测试
    public static void main(String[] args) {

        System.out.println(0 & (0-1));
        System.out.println(new 力扣_231_2的幂().isPowerOfTwo(1));
        System.out.println(new 力扣_231_2的幂().isPowerOfTwo(2));
        System.out.println(new 力扣_231_2的幂().isPowerOfTwo(16));
        System.out.println(new 力扣_231_2的幂().isPowerOfTwo(3));
        System.out.println(new 力扣_231_2的幂().isPowerOfTwo(4));
        System.out.println(new 力扣_231_2的幂().isPowerOfTwo(5));
    }

    /**
     题目：给你一个整数 n，请你判断该整数是否是 2 的幂次方。如果是，返回 true ；否则，返回 false 。
        如果存在一个整数 x 使得 n == 2x ，则认为 n 是 2 的幂次方。



     分析：【P ❤】
        1.不断查看最后一个二进制位，发现两个1 : false
        大神: 直接 n & n-1 ==0  && n>0
            --执行用时：0 ms, 在所有 Java 提交中击败了100.00%的用户

     边界值注意：
        1. <1 直接false
     **/
    public boolean isPowerOfTwo(int n) {
        // 大神: 直接 n & n-1 ==0
       return (n & (n-1))== 0 && n>0 ;

        //1.不断查看最后一个二进制位，发现两个1 : false
        /*if(n<1) return false;
        int count = 0;
        while (n>0 ){
            if((n&1)==1 && ++count>1) return false;
            n = n>>1;
        }
        return  true;*/
    }
}
